package com.terrace.web.tagext.easyui.utils;

import java.util.List;

import org.apache.commons.lang.BooleanUtils;
import org.apache.commons.lang.StringUtils;

import com.terrace.core.utils.JsonUtils;
import com.terrace.core.utils.RegularUtils;
import com.terrace.web.tagext.easyui.model.JSFunction;

/**
 * easyui工具类
 * @author jiangyg
 *
 */
public class EasyUIUtils {
	
	/**
	 * 处理字符串中的{}参数，替换成表格行数值
	 * @param url
	 * @param sb
	 * @param quote		数值是否单引号包含
	 * @return
	 */
	public static String handleOptParamOfBrace(String str, StringBuffer sb, boolean quote) {
		List<String> params = RegularUtils.getPropertysByBrace(str);
		String varMessageStr = "temp" + Double.valueOf(Math.ceil(Math.random() * 10000)).intValue();
		sb.append("var " + varMessageStr + " = ('" + str + "')");
		for (String param : params) {
			if (StringUtils.isNotBlank(param)) {
				String valueStr = quote ? ("\"'\"+" + "rec['" + param + "']" + "+\"'\"") : "rec['" + param + "']";
				sb.append(".replace(/{" + param + "}/g, " + valueStr + ")");
			}
		}
		sb.append(";");
		return varMessageStr;
	}
	
	/**
	 * 追加js对象属性
	 * @param sb
	 * @param option
	 * @param value
	 */
	public static <T> void appendJSObjectProperty(StringBuffer sb, String option, T value) {
		if (sb == null || StringUtils.isBlank(option) || value == null) {
			return;
		}
		if (value instanceof String) {
			if (StringUtils.isNotBlank(value.toString())) {
				appendJSObjectPropertyHasQuotes(sb, option, value);
			}
		} else if (value instanceof Boolean) {
			appendJSObjectPropertyHasNotQuotes(sb, option, BooleanUtils.toStringTrueFalse((Boolean) value));
		} else if (value instanceof Number) {
			appendJSObjectPropertyHasNotQuotes(sb, option, value);
		} else if (value instanceof JSFunction) {
			appendJSObjectPropertyHasNotQuotes(sb, option, ((JSFunction) value).transferJSFunction());
		} else if (value instanceof Object[] || value instanceof Number[]) {
			appendJSObjectPropertyForJson(sb, option, value);
		} else {
			appendJSObjectPropertyForJson(sb, option, value);
		}
	}
	
	/**
	 * 追加easyui的data-option属性--根据数据类型，决定带不带单引号
	 * @param sb		字符串
	 * @param option	属性名
	 * @param value		属性值
	 */
	public static <T> void appendDatsOption(StringBuffer sb, String option, T value) {
		appendJSObjectProperty(sb, option, value);
	}
	
	/**
	 * 追加easyui的data-option属性--有单引号
	 * @param sb		字符串
	 * @param option	属性名
	 * @param value		属性值
	 */
	public static void appendJSObjectPropertyHasQuotes(StringBuffer sb, String option, Object value) {
		sb.append(option + ":'" + value + "',");
	}
	
	/**
	 * 追加easyui的data-option属性--没有单引号
	 * @param sb		字符串
	 * @param option	属性名
	 * @param value		属性值
	 */
	public static void appendJSObjectPropertyHasNotQuotes(StringBuffer sb, String option, Object value) {
		sb.append(option + ":" + value + ",");
	}
	
	/**
	 * 追加easyui的data-option属性--没有单引号
	 * @param sb		字符串
	 * @param option	属性名
	 * @param value		属性值
	 */
	public static void appendJSObjectPropertyForJson(StringBuffer sb, String option, Object value) {
		sb.append(option + ":" + JsonUtils.beanToJson(value) + ",");
	}
	
	/**
	 * 截去StringBuffer字符串最后面的逗号
	 * @param sb
	 * @return
	 */
	public static StringBuffer substringLastComma(StringBuffer sb) {
		if (sb.length() > 0 && sb.substring(sb.length() - 1).equals(",")) {
			sb.delete(sb.length() -1, sb.length());
		}
		return sb;
	}

}
